package com.xiaomeng.principle.liskov;

public class Liskov {


    public static void main(String[] args) {
        A a = new A();
        System.out.println("11 - 3 : " + a.func1(11, 3));
        System.out.println("1 - 8 : " + a.func1(1, 8));
        System.out.println("----------------");
        B b = new B();
        // B类不再继承A类,因此调用者不会再认为func1()  不是求减的功能
        System.out.println("11 + 3 : " + b.func1(11, 3));
        System.out.println("1 + 8 : " + b.func1(1, 8));
        System.out.println("11 + 3 + 9 : " + b.func2(11, 3));
        System.out.println("11 - 8 : " + b.func3(11, 8));
    }
}

// 创建一个更加基础的基类
class Base {
    // 把更加基础的方法和成员写到Base类

}

class A extends Base {
    public int func1(int num1, int num2) {
        return num1 - num2;
    }
}
class B extends Base {
    // 如果B需要使用A类的方法,使用组合关系
    private A a = new A();
    public int func1(int num1, int num2) {
        return num1 + num2;
    }
    public int func2(int num1, int num2) {
        return func1(num1, num2) + 9;
    }
    // 我们仍然想使用A的方法
    public int func3(int a, int b) {
        return this.a.func1(a, b);
    }
}
